logstash中output{}的另类写法

日志传输路径如下:
filebeat->redis->logstash->es

在filebeat配置文件中,收集日志的时候配置的有如下参数:

1
2
fields:
log_source: messages

表示的是会把log_source作为fields的二级字段

若是配置如下,表示的是会把log_source作为顶级字段:

1
2
3
fields:
log_source: messages
fields_under_root: true

使用这个字段来作为区分不同应用日志的来源;

在logstash中从redis读取后,output给es的时候,根据上述不同的字段来创建不同的应用日志索引。
常见的写法是多使用if条件进行区分,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if [fields][log_source] == 'test_custom' {
elasticsearch {
hosts => ["http://172.17.107.187:9203", "http://172.17.107.187:9201","http://172.17.107.187:9202"]
index => "filebeat_test_custom-%{+YYYY.MM.dd}"
user => "elastic"
password => "escluter123456"
}
}

if [fields][log_source] == "test_user" {
elasticsearch {
hosts => ["http://172.17.107.187:9203","http://172.17.107.187:9201","http://172.17.107.187:9202"]
index => "filebeat_test_user-%{+YYYY.MM.dd}"
user => "elastic"
password => "escluter123456"
}
}

这样写也能使用,但是考虑到假设这个区分字段比较多的话,那这得写多少个if条件呀,所以可以使用如下的用法:
在创建索引的时候使用上这个区分用的字段,具体如下:

1
2
3
4
5
6
elasticsearch {
hosts => ["http://172.17.107.187:9203","http://172.17.107.187:9201","http://172.17.107.187:9202"]
index => "filebeat_%{[fields][log_source]}-%{+YYYY.MM.dd}"
user => "elastic"
password => "escluter123456"
}

说明:%{[fields][log_source]}表示的是获取区分字段的值

若是顶级字段则是这样的用法:%{[log_source]}

-------------本文结束 感谢您的阅读-------------
如果觉得我的文章对您有用,请随意打赏.您的支持将鼓励我继续创作!

  • 本文标题: logstash中output{}的另类写法
  • 文章作者: 永夜初晗凝碧天
  • 发布时间: 2020年01月09日 - 09:01:09
  • 更新时间: 2020年01月09日 - 09:01:22
  • 本文链接: https://yongnights.github.io/2020/01/09/logstash中output{}的另类写法/
  • 版权声明: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。